home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / games / wakka / source / pad.c < prev    next >
Text File  |  2000-06-25  |  2KB  |  105 lines

  1. /******************************
  2.  
  3.     わっか
  4.  
  5.         入力
  6.  
  7.  ******************************/
  8.  
  9.  
  10. #include    <sys\iocs.h>
  11.  
  12. #include    "wakka.h"
  13. #include    "pad.h"
  14.  
  15.  
  16. static PAD    pad_data = 0xffff;        /* パッドの状態 */
  17. static PAD    pad_just;            /* 今回の変化 */
  18. static PAD    pad_rept;            /* リピート付き */
  19. static Bool    read_flag = TRUE;        /* 状態取得があったか */
  20. static int    pad_cnt = 16;            /* リピート用カウンタ */
  21.  
  22. Bool    esc_key  = FALSE;            /* ESCキー */
  23. Bool    esc_last = TRUE;
  24.  
  25.  
  26. /********************
  27.     パッド同期処理
  28.  ********************/
  29. void    pad_synch(void)
  30. {
  31.     int    k1, k2;
  32.     PAD    last, last_j, last_r;
  33.  
  34.     last   = pad_data;            /* 前回の状態 */
  35.     last_j = pad_just;
  36.     last_r = pad_rept;
  37.     pad_data = ~_iocs_joyget(0);        /* スティックデータ取得 */
  38.     k1 = _iocs_bitsns(0x08);        /* キー入力 */
  39.     k2 = _iocs_bitsns(0x09);
  40.     if ( k1 & 0x10 ) {            /* 8 */
  41.         pad_data |= PAD_UP;
  42.     }
  43.     if ( k2 & 0x10 ) {            /* 2 */
  44.         pad_data |= PAD_DOWN;
  45.     }
  46.     if ( k1 & 0x80 ) {            /* 4 */
  47.         pad_data |= PAD_LEFT;
  48.     }
  49.     if ( k2 & 0x02 ) {            /* 6 */
  50.         pad_data |= PAD_RIGHT;
  51.     }
  52.     k1 = _iocs_bitsns(0x06);
  53.     if ( k1 & 0x20 ) {            /* スペース */
  54.         pad_data |= PAD_A;
  55.     }
  56.     k1 = _iocs_bitsns(0x03);
  57.     k2 = _iocs_bitsns(0x09);
  58.     if ( (k1 & 0x20) || (k2 & 0x40) ) {    /* RET,ENTER */
  59.         pad_data |= PAD_B;
  60.     }
  61.  
  62.     pad_just = pad_data & ~last;        /* 変化データ */
  63.     pad_rept = pad_just;            /* リピート付き */
  64.     if ( pad_data == last ) {
  65.         if ( --pad_cnt == 0 ) {
  66.             pad_rept = pad_data;
  67.             pad_cnt = 4;
  68.         }
  69.     }
  70.     else {
  71.         pad_cnt = 16;
  72.     }
  73.     if ( !read_flag ) {
  74.         pad_just |= last_j;
  75.         pad_rept |= last_r;
  76.     }
  77.     read_flag = FALSE;
  78.  
  79.     if ( _iocs_bitsns(0) & 0x02 ) {        /* ESCキー */
  80.         esc_key = TRUE;
  81.     }
  82. }
  83.  
  84. /****************************
  85.     パッド状態取得
  86.     戻り値    パッド状態
  87.  ****************************/
  88. PAD    get_pad(void)            /* そのまま */
  89. {
  90.     return    pad_data;
  91. }
  92.  
  93. PAD    get_push(void)            /* 押した直後 */
  94. {
  95.     read_flag = TRUE;
  96.     return    pad_just;
  97. }
  98.  
  99. PAD    get_rept(void)            /* リピート付き */
  100. {
  101.     read_flag = TRUE;
  102.     return    pad_rept;
  103. }
  104.  
  105. /********** End of File *******************************************/